package DataStructureAndAlgorithm.Tedukuri.递推与递归;
import java.util.Scanner;
//递归实现排列型枚举
public class AcWing_94 {
    static boolean[] st = new boolean[11];
    static int[] path = new int[11];
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        dfs(1,n);
    }
    static void dfs(int u,int n){
        //到达最后一个位置了
        if (u == n + 1){
            for (int i = 1; i <= n; i++){
                System.out.print(path[i] + " ");
            }
            System.out.println();
            return ;
        }
        for (int i = 1; i <= n; i++){
            //如果数i未被选 择
            if (!st[i]){
                //回溯法递归
                st[i] = true;
                path[u] = i;
                dfs(u + 1,n);
                //恢复现场
                st[i] = false;
            }
        }
    }
}
/*
把 1∼n 这 n

个整数排成一行后随机打乱顺序，输出所有可能的次序。
输入格式

一个整数 n

。
输出格式

按照从小到大的顺序输出所有方案，每行 1

个。

首先，同一行相邻两个数用一个空格隔开。

其次，对于两个不同的行，对应下标的数一一比较，字典序较小的排在前面。
数据范围

1≤n≤9

输入样例：

3

输出样例：

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

 */